/*this

// 构造函数中的this
function Foo(name) {
    this.name = name
}
var f= new Foo('zhangsan')

// 对象的this
var obj = {
    name: 'A',
    printName: function () {
        console.log(this.name)
    }
}
obj.printName()

// 作为普通函数来执行
function fn() {
    console.log(this)
}
fn()

// call apply bind
function fn1(name, age) {
    console.log(name)
    console.log(this)
}
fn1.call({x:100},'zhangsan',20)

// .bind必须函数表达式的方式
var fn2 = function fn2(name, age) {
    console.log(name)
    console.log(this)  
}.bind({y:200})
fn2('zhangsan',20)


// 作用域
// 无块级作用域
if (true) {
    var name = 'zhangsan'
}
console.log(name)

// 函数和全局作用域
var a =100
function fn() {
    var a =200
    console.log('fn', a)
}
console.log('global', a)
fn()
*/

// 作用域链
var a = 100
function F1() {
    var b =200
    function F2() {
        var c =300
        console.log(a) //a是自由能量
        console.log(b) //b是自由能量
        console.log(c)
    }
    F2()
}
F1()

